﻿Public Partial Class GroupManager
    Inherits CoreClass

    ' Gan gia tri cho bien MenuID de kiem tra quyen cua ng dung, gia tri nay lay trog DB va dc fix
    Dim chkMenu As Integer = getIDMenu(1)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            ' Set sự kiện submit cho nút chỉ định
            Page.Form.DefaultButton = btnSearch.UniqueID
            chkPms((CInt(Session("GroupId").ToString())), chkMenu)
            If Not Page.IsPostBack Then
                If chkView = 1 Then
                    BindGrid()
                    loadStt()
                Else
                    'MsgBox(chkView & chkUpdate & chkDelete)
                    objAlert.ErrorBox(Page, "Bạn không có quyền truy xuất trang này, liên hệ với Admin để biết thêm chi tiết.")
                End If
            End If
        Catch ex As Exception
            Response.Redirect("/Inside/xLogin.aspx?redirect=" & Request.Url.PathAndQuery.Replace("?", "|"))
        End Try

    End Sub

#Region "Các hàm tự viết"

    ' Format nút phân quyền trên Grid View
    Public Function getPmsLink(ByVal groupID As Integer) As String
        Return "<a class=""Astyle"" href='PmsManager.aspx?group=" & groupID & "'>Sửa</a>"
    End Function

    ' Lấy dự liệu đưa vào Grid View
    Public Sub BindGrid()
        Try
            sql = "spi_GroupGet "
            If txtGroupName.Text = "" Then
                sql &= "'',"
            Else
                sql &= objFunction.FieldUniCk(objFunction.FieldSearchCheck(txtGroupName.Text)) & ","
            End If
            If cbxStatus.SelectedValue = "-1" Or cbxStatus.SelectedValue = "" Then
                sql &= "''"
            Else
                sql &= cbxStatus.SelectedValue
            End If
            dsSource.ConnectionString = ConnectionString
            dsSource.SelectCommand = sql

            ' Tạo thêm 1 data source lấy Status cho drop down list khi nhấn nút Edit trên GridView
            sql = "spi_StatusGet"
            dsStt.ConnectionString = ConnectionString
            dsStt.SelectCommand = sql

            gridMenu.DataBind()
            If gridMenu.Rows.Count = 0 Then
                objAlert.AlertBox(Page, "Không tìm thấy dữ liệu phù hợp với yêu cầu của bạn, hãy thử lại.")
            End If
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Kiểm tra dữ liệu nhập trên Form
    Public Function chkField() As Boolean
        Dim flag = True

        If txtGroupName.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập giá trị cho mục Tên Nhóm.")
            Return flag
        End If
        If Not objFunction.IsAlphaNumeric(txtGroupName.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Tên nhóm chỉ bao gồm các chữ cái: A-Z, a-z và số 0-9.")
            Return flag
        End If
        If cbxStatus.SelectedValue = "" Or cbxStatus.SelectedValue = "-1" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy chọn giá trị Trạng Thái cho đúng.")
            Return flag
        End If

        ' Kiem tra xem ten nhom da co hay chua?
        sql = "spi_GroupChkExist " & objFunction.FieldUniCk(txtGroupName.Text)
        objDataRead.ExeReader(sql)
        If objDataRead.dataRead.Read Then
            objAlert.ErrorBox(Page, "Tên nhóm này đã tồn tại trong hệ thống, hãy chọn tên khác.")
            flag = False
            Return flag
        End If

        Return flag
    End Function

    ' Lấy dữ liệu vào ComboBox Status
    Private Sub loadStt()
        Try
            cbxStatus.DataTextField = "CodeDesc"
            cbxStatus.DataValueField = "CodeValue"
            cbxStatus.DataSource = objData.ExeDataset("spi_StatusGet")
            cbxStatus.DataBind()
            cbxStatus.Items.Insert(0, New ListItem("-- No Filter --", "-1"))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Format Status trên Grid View
    Public Function getColorStt(ByVal stt As Integer) As String
        If stt = 1 Then
            Return "<span style=""font-weight:bold;color: #00CC00""><b>Hoạt động</b></span>"
        Else
            Return "<span style=""font-weight:bold;color: #FF0000""><b>Khóa \ Tạm dừng</span>"
        End If
    End Function

#End Region

#Region "Các sự kiện của grid và Button"

    ' Load lại data khi chuyển trang
    Private Sub gridMenu_PageIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles gridMenu.PageIndexChanged
        BindGrid()
    End Sub

    ' Hiển thị textbox để edit ngay trên GridView
    Protected Sub gridMenu_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gridMenu.RowEditing
        gridMenu.EditIndex = e.NewEditIndex
        gridMenu.RowStyle.CssClass = "colorEdit"
        BindGrid()
    End Sub

    ' Gọi lệnh Update sau khi click button SAVE lúc Edit row Grid View
    Private Sub gridMenu_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gridMenu.RowUpdating
        ' Goi ham kiem tra quyen them moi
        If Not chkUpdate = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            e.Cancel = True
            Exit Sub
        End If

        Try
            Dim lblId As Label = CType(gridMenu.Rows(e.RowIndex).FindControl("lbl_ID"), Label)
            Dim txtGroupName As TextBox = CType(gridMenu.Rows(e.RowIndex).FindControl("txtGroupName"), TextBox)
            Dim ddlStt As DropDownList = DirectCast(gridMenu.Rows(e.RowIndex).FindControl("ddlStt"), DropDownList)

            sql = "spi_GroupUpdate"

            dsSource.ConnectionString = ConnectionString
            dsSource.UpdateCommand = sql
            dsSource.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure
            dsSource.UpdateParameters.Add("GroupID", objFunction.ValueCheck(lblId.Text))
            dsSource.UpdateParameters.Add("GroupName", txtGroupName.Text)
            dsSource.UpdateParameters.Add("GroupStt", ddlStt.SelectedValue)

            gridMenu.EditIndex = -1
            BindGrid()
            objFunction.writeLog(Session("UserId"), 2, "Update nhóm người dùng", txtGroupName.Text, ddlStt.SelectedItem.Text)
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try

    End Sub

    ' Gọi lệnh Delete sau khi click button Delete trên Grid View
    Private Sub gridMenu_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gridMenu.RowDeleting
        ' Kiểm tra xem có quyền delete hay không
        If Not chkDelete = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            e.Cancel = True
            Exit Sub
        End If

        Try
            Dim id As Integer
            id = Integer.Parse(gridMenu.DataKeys(e.RowIndex).Value.ToString)
            Dim lblGroupName As Label = CType(gridMenu.Rows(e.RowIndex).FindControl("lbl_GroupName"), Label)
            sql = "spi_GroupDelete"

            dsSource.ConnectionString = ConnectionString
            dsSource.DeleteCommand = sql
            dsSource.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure
            dsSource.DeleteParameters.Add("GroupID", id)

            gridMenu.EditIndex = -1
            BindGrid()

            objFunction.writeLog(Session("UserId"), 0, "Xóa nhóm người dùng", lblGroupName.Text)
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Hủy lệnh Edit
    Private Sub gridMenu_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles gridMenu.RowCancelingEdit
        gridMenu.EditIndex = -1
        BindGrid()
    End Sub

    ' Tạo các dòng khác màu khi data đc fill vào bảng
    Private Sub gridMenu_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridMenu.RowCreated
        'Add CSS class on normal row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Normal Then
            e.Row.CssClass = "normal"
        End If

        'Add CSS class on alternate row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Alternate Then
            e.Row.CssClass = "alt"
        End If

    End Sub

    ' Load lại Data khi sắp xếp lại bảng
    Protected Sub gridMenu_Sorted(ByVal sender As Object, ByVal e As EventArgs) Handles gridMenu.Sorted
        BindGrid()
    End Sub

    ' Tìm Kiếm
    Private Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
        ' Kiểm tra xem có quyền xem hay không
        If Not chkView = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            Exit Sub
        End If
        BindGrid()
    End Sub

    ' Thêm mới
    Private Sub btnNew_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNew.Click

        ' Goi ham kiem tra quyen them moi
        If Not chkUpdate = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quuyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            Exit Sub
        End If

        ' Goi ham kiem tra Form
        If Not chkField() Then
            Exit Sub
        End If

        Try
            sql = "spi_GroupUpdate 0,"
            sql &= objFunction.FieldUniCk(txtGroupName.Text) & ","
            sql &= objFunction.ValueCheck(cbxStatus.SelectedValue)
            objDataRead.ExeReader(sql)
            objAlert.InfoBox(Page, "Tạo mới nhóm người dùng thành công", Request.Url.PathAndQuery)
            objFunction.writeLog(Session("UserId"), 1, "Tạo mới nhóm người dùng", txtGroupName.Text, cbxStatus.SelectedItem.Text)
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub


#End Region


    
End Class